package com.epin.business.system.service;

import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.epin.base.enums.commons.StatusEnum;
import com.epin.base.exception.check.RecordImmutableException;
import com.epin.base.exception.check.RecordQuoteException;
import com.epin.base.exception.check.RecordRepeatException;
import com.epin.business.system.entity.User;
import com.epin.business.system.entity.bo.UserNormal;
import com.epin.business.system.entity.vo.UserParam;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author xj
 * @since 2016-12-20
 */
public interface UserService extends IService<User> {
	
	/**
	 * <p>查询用户数据</p>
	 * 
	 * @param pageNumber 当前页数
	 * @param pageSize 每页大小
	 * @param params 参数表
	 * 
	 * <p>
	 * 		可添加数据：
	 * 		<p>keyword：关键词</p>
	 * 		<p>companyId：当前公司ID</p>
	 * 		<p>status：用户状态</p>
	 * </p>
	 * 
	 * @return Page<>
	 * 
	 * @author fujiajun
	 * @since 2017-11-09
	 */
	Page<UserNormal> selectUsersPage(int pageNumber, int pageSize, Map<String, Object> params);
	
	
	/**
	 * <p>根据参数表获取用户</p>
	 * 
	 * @param params 参数表
	 * <p>
	 * 		可添加数据：
	 * 		<p>accountName：用户名</p>
	 * 		<p>userId：用户ID</p>
	 * 		<p>status：用户状态</p>
	 * </p>
	 * 
	 * @return SysUser
	 * 
	 * @author fujiajun
	 * @since 2017-11-09
	 */
	UserNormal selectUserByParams(Map<String, Object> params);
	
	
	/**
	 * <p>新增或更新企业信息</p>
	 * <p>抛出记录重复异常</p>
	 * 
	 * @param id 用户ID
	 * @param uParam 用户参数
	 * @param operator 当前操作人员
	 * 
	 * @return boolean
	 * @throws RecordRepeatException
	 * 
	 * @author fujiajun
	 * @since 2017-11-09
	 */
	boolean insertOrUpdateUser(Integer id, UserParam uParam, UserNormal operator) throws RecordRepeatException;
	
	
	/**
	 * <p>批量删除用户</p>
	 * <p>抛出记录被引用异常</p>
	 * 
	 * @param ids 用户id数组
	 * 
	 * @return boolean
	 * @throws RecordQuoteException
	 * 
	 * @author fujiajun
	 * @since 2017-11-09
	 */
	boolean deleteUsersByIds(List<Integer> ids) throws RecordQuoteException;
	
	
	
	/**
	 * <p>根据用户id作废或取消作废用户</p>
	 * 
	 * @param ids 用户id数组
	 * @param status 要修改的目标状态
	 * @param operator 当前操作人员
	 * 
	 * @return boolean
	 * 
	 * @author fujiajun
	 * @since 2017-11-09
	 */
	boolean cancelUsersByIds(List<Integer> ids, StatusEnum status, UserNormal operator);
	
	
	/**
	 * <p>修改密码</p>
	 * 
	 * @param id 用户ID
	 * @param newPassword 新密码
	 * 
	 * @return boolean
	 * @throws RecordImmutableException
	 * 
	 * @author fujiajun
	 * @since 2017-11-09
	 */
	boolean resetPasswordById(Integer id, String newPassword) throws RecordImmutableException;
	
	
	/**
	 * <p>根据公司ID数组获取用户列表</p>
	 * 
	 * @param companyIds 公司ID数组
	 * 
	 * @return List<>
	 * 
	 * @author fujiajun
	 * @since 2017-11-09
	 */
	List<UserNormal> selectUsersByCompanyIds(List<Integer> companyIds);
	
	
	/**
	 * <p>根据群组ID数组获取用户列表</p>
	 * 
	 * @param deptIds 群组ID数组
	 * 
	 * @return List<>
	 * 
	 * @author fujiajun
	 * @since 2017-11-09
	 */
	List<UserNormal> selectUsersByDeptIds(List<Integer> deptIds);
	
}
